home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #5 & #6
/
Amiga Plus CD - 1995 - No. 5 and 6.iso
/
pd
/
emulator
/
zxam spectrum
/
zxam_rexx
/
español
/
zxam_tape.zxam
< prev
next >
Wrap
Text File
|
1995-07-31
|
4KB
|
140 lines
/* Este script se encarga de cargar/grabar en ficheros .TAP */
/* Para convertir ficheros sueltos a .TAP lo mejor es usar un copión */
/* como el DUPLITAPE, con 'Load Mode -> Disk' y 'Save Mode -> ARexx' */
/* comprobamos si el emulador está presente */
address command
if ~show(ports,ZXAM_REXX) then do
requestchoice 'title "ZXAM Script error..." body "No encuentro el puerto del emulador!!" gadgets "AARGH!"'
exit
end
ZXAMTapeSetResult(2) /* resultado=error */
/* Comprobar el tipo de operación deseada */
oper=ZXAMTapeAction()
if oper=0 then exit /* Script ejecutado manualmente */
if oper=3 then signal actionsave /* SAVE */
/* La operación es LOAD o VERIFY */
actionload:
nombre=ZXAMTapeLoadName() /* Nombre del .TAP actualmente seleccionado */
ZXAMTapeSetLoadName('')
/* Requester de LOAD si no hay .TAP seleccionado */
if nombre='' then do
oldpath=zxamactloadpath()
oldpattern=zxamactpattern()
zxamloadpath("ram:")
zxampattern('#?.TAP')
ZXAMControlToFront()
nombre=zxamloadrequester("Selecciona el fichero .TAP...")
ZXAMTapeSetLoadOffset(0)
ZXAMEmulToFront()
zxamloadpath(oldpath)
zxampattern(oldpattern)
end
if nombre='' then exit 0 /* pulsado el CANCEL */
/* abrimos el fichero */
if ~open('fichero',nombre,'R') then exit 0
/* Nos colocamos en el punto adecuado del fichero */
filepos=ZXAMTapeLoadOffset()
/* Si hay problemas, seleccionar otro .TAP */
if filepos~=seek('fichero',filepos,'B') then do
dummy=close('fichero')
signal actionload
end
/* leer el tamaño del bloque actual */
size=readch('fichero',2)
if length(size)~=2 then do
dummy=close('fichero')
signal actionload
end
/* abrir fichero temporal para entregar resultado */
if ~open('destino','t:zxamtemp','W') then exit 0
/* convertirlo a numero */
size=c2d(reverse(size)) /* fomato invertido Z80 */
/* cargar el bloque */
block=readch('fichero',size)
/* salvarlo hacia el fichero temporal */
dummy=writech('destino',block)
ZXAMTapeSetLoadName(nombre)
ZXAMTapeSetLoadOffset(seek('fichero',0,'C'))
ZXAMTapeSetResult(1,'t:zxamtemp')
dummy=close('fichero')
dummy=close('destino')
exit
/* La operación es SAVE */
actionsave:
nombre=ZXAMTapeSaveName()
ZXAMTapeSetSaveName("")
if ((zxamtapeflag()=0)&(zxampeek(zxamtapeaddress())=0)&(zxamtapesize()=17)) then nombre=''
/* requester de SAVE */
if nombre='' then do
oldpath=zxamactsavepath()
oldpattern=zxamactpattern()
zxamsavepath("ram:")
zxampattern('#?.TAP')
ZXAMControlToFront()
nombre=zxamsaverequester("Selecciona el fichero .TAP para SAVE...")
ZXAMTapeSetSaveOffset(0)
ZXAMEmulToFront()
zxamsavepath(oldpath)
zxampattern(oldpattern)
end
if nombre='' then exit 0 /* pulsado el CANCEL */
if ~exists(nombre) then
/* creamos el fichero */
if ~open('fichero',nombre,'WRITE') then exit
else nop
else
/* abrimos el fichero en modo APPEND */
if ~open('fichero',nombre,'APPEND') then exit
else nop
endif
/* Extraemos de la memoria de Spectrum el bloque a grabar */
block=d2c(zxamtapeflag())
if zxamtapesize()~=0 then block=insert(block,zxamgetmem(zxamtapeaddress(),zxamtapesize()))
block=insert(block,d2c(zxamchecksumstring(block)))
/* añadimos el tamaño del bloque */
size=zxamtapesize()+2
size=d2c(size)
if length(size)=1 then size=insert(d2c(0),size)
/* convertimos al formato invertido tipo Z80 */
size=reverse(size)
block=insert(size,block)
/* salvamos el bloque */
dummy=writech('fichero',block)
ZXAMTapeSetSaveName(nombre)
ZXAMTapeSetResult(1)
dummy=close('fichero')
exit